Encryption is a process of transforming information (referred to as plaintext) into an unreadable form (referred to as ciphertext). Decryption is a transformation that recovers the plaintext from the ciphertext. A cipher typically performs a transformation that is controlled using a symmetric key (same key used for ciphering and deciphering) or an asymmetric key (different keys used for ciphering and deciphering) such that when the key is input to the cipher along with plaintext, the plaintext is enciphered via an encryption transformation, and when the key is input to the cipher along with ciphertext, the ciphertext is deciphered via a decryption transformation (which is an inverse of the encryption transformation). Encryption transformations are performed by an encryption algorithm (function) of a cipher, and decryption transformations are performed by a decryption algorithm (function) of the cipher. As such, the term “encipher” and “encrypt” may be used interchangeably in the following discussion. Likewise, the term “decipher” and “decrypt” may also be used interchangeably in the following discussion.
Encryption is often used to protect military and civilian systems, examples of which include Internet e-commerce, mobile telephone networks, bank automatic teller machines, etc. As technology and computing power advance, new vulnerabilities may be commonly discovered for encryption mechanisms that were previously considered secure. When such weaknesses are discovered, new encryption mechanisms and techniques may be required to maintain security of sensitive information.
Conventionally, ciphertext block chaining provides an encryption mode to prevent an attacker from being able to create a code table from commonly repeated blocks. For instance, a block of all space characters results in the same ciphertext block. Specifically, an output stream is prepended with a random block, which is referred to as an initialization vector (IV). For each block to be enciphered, the IV is combined with the current block of plaintext using a binary exclusive or (XOR) operation. Then the resulting block is enciphered. The current IV is replaced with the resulting enciphered block, which is appended to the output stream.
The above conventional approach is reasonably fast and strong. However, such approach may not completely eliminate all output patterns. In particular, if the same output block is produced more than once for the same key, it may be possible to determine some statistical information about the plaintext of the blocks that follow. The above possibility may exist even if the block occurs in a different output stream. Therefore, data security may be compromised.